var style=document.createElement('style');
style.id='CSSBlock';
style.innerHTML='* .CommonCSS-hide{visibility:hidden !important;display:block !important;}';
document.querySelector('head').appendChild(style);

/**
 * [getObjKey 通过键值获取键名]
 * @param  {[Object]} obj   [需要查询的对象]
 * @param  {[All]}    value [键值]
 * @return {[Array]}        [匹配的键名数组]
 */
window.getObjKey=function(obj,value){
    var res=[];
    for(var k in obj){
        if(value==obj[k])res.push(k)
    }
    return res;
} 




/**
 * [getMousePos 获取鼠标坐标]
 * @param  {[Event]} event [Event事件对象]
 * @return {[Object]}      [{x:水平坐标，y:垂直坐标}]
 */
window.getMousePos=function(event){
    var e = event||window.event;
    if(e.changedTouches)e=e.changedTouches[0];
    return{
        x:e.clientX+document.body.scrollLeft + document.documentElement.scrollLeft,
        y:e.clientY+document.body.scrollTop + document.documentElement.scrollTop
    }
}



/**
 * [clone 深度复制对象、数组]
 * @param {[Object/Array]} Obj [需要复制的对象、数组]
 * @return {[Object/Array]} [复制的对象、数组]
 */
window.clone=function(Obj){
    var buf;
    if (Obj instanceof Array) {
        buf = [];  // 创建一个空的数组
        var i = Obj.length;
        while (i--) {
            buf[i] = clone(Obj[i]);
        }
        return buf;
    } else if (Obj instanceof Object){
        buf = {};  // 创建一个空对象
        for (var k in Obj) {  // 为这个对象添加新的属性
            buf[k] = clone(Obj[k]);
        }
        return buf;
    }else{
        return Obj;
    }
}


window.objLen=function(obj){
    var num=0;
    for(var i in obj)num++;
    return num;
}



window._dragObj=null;
/**
 * [drag description]
 * @param  {[type]} obj [需要拖动的html元素对象]
 * @param  {[type]} dragObj [触发拖动的html元素对象]
 * @param  {[type]} area [拖动范围html元素对象]
 */
window.drag=function(obj,dragObj,area){
    var selfElement=obj;
    if(!area){
        area={
            width:document.documentElement.clientWidth,
            height:document.documentElement.clientHeight,
        };
    }else if(area.css('position')=='static'){
        area.css('position','relative');
        area=area.offset();
    }


    if(selfElement._isdragInit==true)return;
    selfElement._isdragInit=true;
    if(!dragObj)dragObj=obj;
    if(obj.css('position')=='static')selfElement.style.position='relative';
    if(!obj.css('left'))selfElement.style.left=0;
    if(!obj.css('top'))selfElement.style.top=0;
    dragObj.bind('mousedown',_down).bind('mouseup',_up);

    function _down(event){
        _dragObj=selfElement;
        selfElement._ismove=true;
        selfElement._offset=getMousePos(event);
        selfElement._leftTop=[obj.css('left'),obj.css('top')];
    }

    function _up(event){
        event.stopPropagation();
        selfElement._ismove=false;
    }

    //禁止拖动
    selfElement.undrag=function(){
        dragObj.bind('mousedown',_down);
        dragObj.bind('mouseup',_up);
        selfElement.undrag=null;
    }

    if(!_dragObj){
        _dragObj=true;
        document.onmousemove=function(event){
            if(!_dragObj)return;
            var self=_dragObj;
            if(self._ismove){
                var xy=getMousePos(event);
                var x=self._leftTop[0]+(xy.x-self._offset.x);
                var y=self._leftTop[1]+(xy.y-self._offset.y);
                if(!self.isDisabedDragLeft && x>0 && x+self.offset().width<area.width){
                    self.style.left=x+"px";
                }
                if(!self.isDisabedDragTop && y>0 && y+self.offset().height<area.height){
                    self.style.top=y+"px";
                }
            }
        }

        document.onmouseup=function(event){
            if(_dragObj && _dragObj!=true)_dragObj._ismove=false;
        }
    }
    //return obj;
}


/**
 * 获取或设置样式
 * @param name需要获取值的样式名或以键值对形式设置样式的对象
 * @param value 当name为字符串时为需要设置的值，其它情况无效
 * @returns {*}返回样式值或当前元素
 */





Element.prototype.css=function(name,value){
    if(typeof name=='object'){
        for(var i in name)this.style[i]=name[i];
        return this;
    }

    if(value!=undefined){
        this.style[name]=value;
        return this;
    }

    var v;
    if(window.getComputedStyle) {
        v=window.getComputedStyle(this, null)[name];//非IE
    }else{
        v=this.currentStyle[name];//IE
    }
    if("left,right,width,height,top,bottom".search(name)!=-1){
        return parseFloat(v);
    }
    return v;
}


Array.prototype.remove= function(index) {
    if(index<this.length){
        this.splice(index, 1);
    }
    return this;
}

Array.prototype.removeFromValue= function(Value) {
    this.forEach(function (v,k) {
        if(v==value){
            this.splice(k,1);
        }
    });
    return this;
}


Element.prototype.addClass=function (classStr) {
    var str=this.className;
    if(classStr && str.indexOf(classStr)==-1){
        this.className+=" "+classStr;
    }
    return this;
}

Element.prototype.removeClass=function (classStr) {
    if(classStr){
        this.className=this.className.replace(classStr,'').replace(/(^\s*)|(\s*$)/g, "");
    }
    return this;
}


/**
 * 获取元素相对页面左上角的位置
 * @returns {top: number, bottom: Number, left: number, right: Number, width: (Number|number), height: (Number|number)}
 */
Element.prototype.offset=function(){
    var  xy = this.getBoundingClientRect();
    var arr={
        top:xy.top-document.documentElement.clientTop+document.documentElement.scrollTop,//document.documentElement.clientTop 在IE67中始终为2，其他浏览器为0
        bottom:xy.bottom,
        left:xy.left-document.documentElement.clientLeft+document.documentElement.scrollLeft,//document.documentElement.clientLeft 在IE67中始终为2，其他高级点的浏览器为0
        right:xy.right,
        width:xy.width||xy.right - xy.left, //IE67不存在width 使用right - left获得
        height:xy.height||xy.bottom - xy.top
    }
    return arr;
}


//获取元素宽高
Element.prototype.getSize=function(){
    var arr=[],current=this,res;
    while(current){
        if(current.css('display')=='none'){
            arr.push([current,current.css('visibility')]);
            current.className+=' CommonCSS-hide';
        }
        current=current.parentNode;
        if(current.tagName=="BODY"){
            break;
        }
    }
    res={
        width:parseFloat(this.css('width')),
        height:parseFloat(this.css('height'))
    };
    for(var i=0;i<arr.length;i++){
        arr[i][0].className=arr[i][0].className.replace('CommonCSS-hide','');
    }
    return res;
}

/**
 * IEVersion [ie版本号，大于11时不是ie浏览器]
 */

window.IEVersion=(function(){
    var version;
    if(navigator.userAgent.indexOf("MSIE")>0){
        var v=navigator.appVersion;
        if(v.indexOf('MSIE 5')>0){
            version=5;
        }else if(v.indexOf('MSIE 6')>0){
            version=6;
        }else if(v.indexOf('MSIE 7')>0){
            version=7;
        }else if(v.indexOf('MSIE 8')>0){
            version=8;
        }else if(v.indexOf('MSIE 9')>0){
            version=9;
        }else if(v.indexOf('MSIE 10')>0){
            version=10;
        }else if(v.indexOf('MSIE 11')>0){
            version=11;
        }else{
            version=20;
        }
    }else{
        version=20;
    }
    return version;
})();



/**
* 异步请求
* options={
*   url:请求地址
*   type:请求方式 get(默认)/post
*   data:传参json格式
*   header:参数是否编码与form的enctype属性相同
*   success:成功回调
*   error:成功回调
* }
* */
window.ajax=function(options){
    if(!options.url)return;
    var xhr=new XMLHttpRequest(),data=options.data?options.data:"";
    var type=options.type?options.type.toUpperCase():"GET";
    options.header=options.header?options.header:"application/x-www-form-urlencoded";

    if(data){
        if (data instanceof Object){
            var tmp="";
            for(var k in data) {
                tmp+=k+"="+data[k]+"&";
            }
            data=tmp.substr(0,tmp.length-1);

        }else{
            throw "data不是json格式";
            return;
        }
    }


    if(type=="GET"){
        if(options.url.substr(options.url.length-1,1)!="?"){
            data="?"+data;
        }
        options.url+=data;
    }
    xhr.open(type,options.url);
    xhr.setRequestHeader("Content-Type", options.header);

    xhr.onload=function (res) {
        var data= res.target.response;
        try {
            data=JSON.parse(data);
        } catch (e) {}
        if(options.success){
            options.success(data);
        }else {
            if(data.msg){
                alert2(data.msg);
            }
        }
    }

    xhr.onerror=function (res) {
        var data= res.target.response;
        try {data=JSON.parse(data);} catch (e) {}
        if(options.error){
            options.error(data);
        }
    }
    xhr.send(type=="POST"?data:"");
}





//格式化url参数为json格式
window.urlData=function () {
    var arr=location.search.substr(1,location.search.length).split('&'),res={},tmp;
    for(var i=0;i<arr.length;i++){
        if(arr[i]){
            tmp=arr[i].split('=');
            res[tmp[0]]=decodeURI(tmp[1]);
        }
    }
    return res;
}();

//生成url
window.createUrl=function(url,data){
    var res="";
    for(var i in data){
        res+=i+"="+data[i]+"&";
    }
    res="?"+res.substr(0,res.length-1);
    return url+res;
}



function alert2(str,title,callback,hideClose,width){
    //str：提示内容，
    //title：弹窗标题,
    //hideClose:是否隐藏取消和关闭按钮，
    //callback：点击确定按钮执行的回调函数,
    //width:用于自定义对话框宽
    title=!title ? "提示":title;
    width=!width ? 350:width;
    var tmphtml='<div class="pub-alert" id="alertBox">'
        +'<div class="pub-alert-content">'
        +'<div class="pub-alert-title">'+title
        +'</div>'
        +'<div class="content"><div class="content-box">'+str+'</div></div>'
        +'<div class="bottom">'
        +	'<a href="javascript:" class="pub-btn">确定</a><a href="javascript:" class="pub-btn pub-btn2" style="display:none">取消</a>'
        +'</div></div><div class="pub-alert-bg"></div>'
        +'</div>';
    var tip=document.querySelectorAll('#alertBox'),btn,time=150;
    if(tip.length==0){
        document.body.innerHTML+=tmphtml;
        //UI.drag(tip.querySelector('.pub-alert-content'),tip.querySelector('.pub-alert-title'));
        return;
    }else{
        tip=tip[0];
        tip.querySelector('.content-box').innerHTML=str;
        btn=tip.querySelectorAll('.bottom .pub-btn');
    }
    btn[0].onclick=function(){
        tip.removeClass('on');
        if(callback)callback();
    }
    btn[1].onclick=function(){
        tip.removeClass('on');
    }


    tip.addClass('on');
    var offset=[
        (document.documentElement.clientWidth-width)/2+'px',
        (document.documentElement.clientHeight-tip.querySelector('.pub-alert-content').offsetHeight)/2-100+'px'
    ];

    if(offset[0]<0)offset[0]=0;
    if(offset[1]<0)offset[1]=0;

    tip.querySelector('.pub-alert-content').css({
        left:offset[0],
        top:offset[1],
        width:width+'px'
    });
    if(callback){
        if(hideClose){
            btn[1].style.display='none';
        }else{
            btn[1].style.display='inline-block';
        }
    }else{
        btn[1].style.display='none';
    }
}
alert2();


/**
 * 兼容IE8不支持forEach
 */
if(typeof Array.prototype.forEach != 'function') {
    Array.prototype.forEach = function(callback){
        for (var i = 0; i < this.length; i++){
            callback.apply(this, [this[i], i, this]);
        }
    };
}




/**
 * ie版本小于9时提醒升级浏览器
 */
if(window.IEVersion<9){
    document.body.innerHTML+='<div style="background:#f6f5b4;width: 100%;height:100%;position:fixed;left:0;top:0">\n' +
        '    <div style="width: 500px;height:200px;left:50%;top:50%;position:absolute;margin:-130px 0 0 -250px;text-align:center;">\n' +
        '        <div style="font-size: 13px;color:#4f4f4f;margin:0 0 30px 0;">您的浏览器版本过低，可能导致网站不能正常访问，请使用以下浏览器</div>\n' +
        '        <img src="https://gitee.com/wj4750/other/raw/3bc1f62314850c355aa2c488c74234ce8b5cf191/ie8-.png" alt="">\n' +
        '    </div>\n' +
        '</div>';
}



